/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.dal;

import muhnes.sizoo.HibernateUtilSeguridad;
import muhnes.sizoo.modelo.Operacion;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 * Metodo que implementa los metodos definidos en la interfaz asi como los inicis de sesion
 * de la clase
 * @author  nelson chicas
 */
public class OperacionDaoImpl extends GenericoDAO< Operacion, Integer > 
                              implements OperacionDao {
    
    public OperacionDaoImpl() {
        super( HibernateUtilSeguridad.getSessionFactory() );
    }

    @Override
    protected Class<?> getClaseEntidad () {
        return Operacion.class;
    }

    /**
     * Metodo para buscar las operaciones por nombre
     * 
     */
    @Override
    public Operacion buscarPorNombre(String nombre) {
        Session sesion = fabricaSesion.getCurrentSession();
        Query consulta = sesion.createQuery("from Operacion where nombre = :nombre");
        consulta.setParameter("nombre", nombre);
        Operacion operacion = (Operacion)consulta.uniqueResult();
        return operacion;
    }

    /**
     * Metodo que verifica la unicidad de un determinado elemento
     * para no repetir datos en la entidad
     */
    @Override
    public boolean verificarUnicidad(Operacion entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Operacion where codigooperacion != :codigo " +
                     "and lower(nombre) = :nombre";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo", entidad.getCodigooperacion());
        consulta.setParameter("nombre", entidad.getNombre().toLowerCase());
        return consulta.uniqueResult() != null ? true : false;
    }
    
    /**
     * Metodo para verificar la dependencia de las entidades con respecto a los privilegios
     * @param entidad que es la que se esta comparando
     * @return boolean dependiendo de si se encuentra o no
     */
    @Override
    public boolean verificarDependencia (Operacion entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Privilegio where operacion.codigooperacion = :codigo";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigooperacion());
        return !consulta.list().isEmpty();
    }
    
}
